package com.leetcode.August;

import java.util.ArrayList;
import java.util.List;

/**
 * @Description: 螺旋矩阵
 * 初始化四个边界变量：top, bottom, left, right。
 * 2.当 top <= bottom 且 left <= right 时，执行以下操作：
 * 从左到右遍历顶部行。
 * 从上到下遍历右侧列。
 * 从右到左遍历底部行（如果 top < bottom）。
 * 从下到上遍历左侧列（如果 left < right）。
 * 3.更新边界：top++, bottom--, left++, right--。
 * 重复步骤 2 和 3 直到遍历完整个矩阵。
 * @Author: Mr.Fxy
 * @CreateTime: 2024-07-29 17:04
 */
public class SpiralMatrix {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> result = new ArrayList<>();
        if(matrix==null || matrix.length==0 || matrix[0].length== 0) return result;
        int top=0,bottom=matrix.length-1,left=0,right=matrix[0].length-1;
        while (top<=bottom && left<=right){
            for(int i=left;i<=right;i++){
                result.add(matrix[top][i]);
            }
            top++;//1
            for (int i=top;i<=bottom;i++){
                result.add(matrix[i][right]);
            }
            right--;//2
            if(top<=bottom){
                for (int i=right;i>=left;i--){
                    result.add(matrix[bottom][i]);
                }
                bottom--;//1
            }
            if (left<=right){
                for (int i=bottom;i>=top;i--){
                    result.add(matrix[i][left]);
                }
                left++;
            }
        }
        return result;
    }
}
